package bishaiqiangxun;
import java.util.*;
public class Test {
    //笔试强训 day35 第二题   求和
    //算法 : dfs + 回溯
    public static int  n;
    public static int m;
    //要两个链表存数据
    public static List<Integer> list = new ArrayList<>();
    public static List<ArrayList<Integer>> dest = new ArrayList<>();

    public static void dfs(int start,int sum){
        //如果大于等于目标值就不用深搜了
        if(sum >= m) {
            if(sum == m) {
                //等于就加入链表
                dest.add(new ArrayList<>(list));
            }
            return;
        }
        for(int i = start; i <= n; i++) {
            if(i > m) {
                //直接结束他的深搜  换一个
                continue;
            }

            list.add(i);
            //当前元素找完就开始找下一个位置的元素
            //不能重复
            dfs(i+1,sum+i);
            //回溯
            list.remove(list.size()-1);
        }
    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        //深搜 + 回溯
        //输入
        n = in.nextInt();
        m = in.nextInt();

        dfs(1,0);

        for(ArrayList<Integer> res : dest) {
            for(int i = 0; i < res.size();i++) {
                System.out.print(res.get(i));
                if(i != res.size()-1) {
                    System.out.print(" ");
                }
            }
            System.out.println();
        }


    }
}
